package com.fclassroom.logger.entity;

import com.fclassroom.logger.LoggerVar;
import com.fclassroom.logger.exception.LoggerException;
import com.jason.framework.util.DateUtil;
import com.jason.framework.util.StringUtil;

import java.util.Date;

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
             佛祖保佑       永无BUG
	佛曰:  
		写字楼里写字间，写字间里程序员；  
		程序人员写程序，又拿程序换酒钱。  
		酒醒只在网上坐，酒醉还来网下眠；  
		酒醉酒醒日复日，网上网下年复年。  
		但愿老死电脑间，不愿鞠躬老板前；  
		奔驰宝马贵者趣，公交自行程序员。  
		别人笑我忒疯癫，我笑自己命太贱；  
		不见满街漂亮妹，哪个归得程序员？
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
	@author jason
    @date   2015年12月24日 下午3:43:51
	Copyright (c) 2015,  email:14902300@qq.com All Rights Reserved. 
	
	用户日志：
		logLevel|operateStartTime|userId|userName|userIp|appCategory|appType|appVersion|operateCategory|operateMethod|operateUrl|operateTimeLine|operateStatus|operateSize|content 
	业务系统-：10，教师端；20，学生端；30，家长端业务
	系统版本类型：11教师客户端；12教师安卓；13教师iOS；21学生安卓；22学生iOS；
*/
public class OperaterLog {
	public OperaterLog(String msg) throws LoggerException{
		this(msg,"");
	}
	/**
	 * @author jason
	 * @date 2016 2016年7月26日 下午4:25:35
	 * @param msg
	 * @param ipAddr
	 */
	public OperaterLog(String msg, String ipAddr) throws LoggerException{
		if(StringUtil.isNotEmpty(msg)){
			String[] st=msg.split(LoggerVar.log_delim);
			if(st!=null && st.length==15){
				try {
					logLevel=st[0];
					operateStartTime=DateUtil.formatStringTodate(st[1], null);
					
					userId=Long.valueOf(st[2]);
					userName=st[3];
					userIp=st[4];
					if(StringUtil.isEmpty(userIp)){
						userIp=ipAddr;
					}
					appCategory=Integer.valueOf(st[5]);
					appType=Integer.valueOf(st[6]);
					appVersion=st[7];
					
					operateCategory=st[8];
					operateMethod=st[9];
					if(StringUtil.isNotEmpty(st[10])&&st[10].length()>500){
						operateUrl=st[10].substring(0,st[10].length());
					}else {
						operateUrl=st[10];
					}
					operateTimeLine=st[11];
					operateStatus=Integer.valueOf(st[12]);
					operateSize=Integer.valueOf(st[13]);
					
					content=st[14];
					
				} catch (Exception e) {
					
				}
			}else{
				throw new LoggerException("10007");
			}
		}
	}
	@Override
	public String toString() {
		StringBuilder stringBuilder=new StringBuilder();
		
		stringBuilder.append(this.logLevel);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.operateStartTime);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.userId);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.userName);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.userIp);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.appCategory);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.appType);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.appVersion);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.operateCategory);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.operateMethod);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.operateUrl);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.operateTimeLine);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.operateStatus);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.operateSize);
		stringBuilder.append(LoggerVar.log_delim);
		
		stringBuilder.append(this.content);
		stringBuilder.append(LoggerVar.log_delim);

		return stringBuilder.toString();
	}
	private Long id;
	private Long userId;
	private String userName;
	/**
     * 操作者的IP，HTTP请求是remote_host
     */
    private String userIp;
	/**
	 * 日志等级 DEBUG < INFO < WARN < ERROR
	 */
	private String logLevel;
	/**
	 * 操作模块名称 
	 * 业务系统-：10，教师端；20，学生端；30，家长端
	 */
	private Integer appCategory;
	/**
	 * 业务系统版本类型：11教师客户端；12教师安卓；13教师iOS；21学生安卓；22学生iOS；
	 */
	private Integer appType;  
    /**
     * 业务系统的版本 
     * 例如：1.2.1
     */
    private String appVersion;
    /**
     *  具体操作的数据，采用json格式。如果是http，封装 header,body，例如：headers:{} body: {}
     */
    private String content;
    /**
     * 业务模块的模块类别，例如：出卷，读卷
     */
	private String operateCategory;
	/**
	 * 操作的URL
	 */
	 private String operateUrl;
	/**
     *  业务模块的具体方法，例如：添加填空题,http：get post等
     */
    private String operateMethod;
    /**
     * 执行操作的时间
     */
    private Date operateStartTime;
    /**
     * 执行操作花费的时间
     */
    private String operateTimeLine;
    /**
     * 操作的状态
     */
    private Integer operateStatus;
    /**
     * 操作响应的数据大小
     */
    private Integer operateSize;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public Long getUserId() {
		return userId;
	}
	public void setUserId(Long userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserIp() {
		return userIp;
	}
	public void setUserIp(String userIp) {
		this.userIp = userIp;
	}
	public String getLogLevel() {
		return logLevel;
	}
	public void setLogLevel(String logLevel) {
		this.logLevel = logLevel;
	}
	public Integer getAppCategory() {
		return appCategory;
	}
	public void setAppCategory(Integer appCategory) {
		this.appCategory = appCategory;
	}
	public Integer getAppType() {
		return appType;
	}
	public void setAppType(Integer appType) {
		this.appType = appType;
	}
	public String getAppVersion() {
		return appVersion;
	}
	public void setAppVersion(String appVersion) {
		this.appVersion = appVersion;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getOperateCategory() {
		return operateCategory;
	}
	public void setOperateCategory(String operateCategory) {
		this.operateCategory = operateCategory;
	}
	public String getOperateUrl() {
		return operateUrl;
	}
	public void setOperateUrl(String operateUrl) {
		this.operateUrl = operateUrl;
	}
	public String getOperateMethod() {
		return operateMethod;
	}
	public void setOperateMethod(String operateMethod) {
		this.operateMethod = operateMethod;
	}
	public Date getOperateStartTime() {
		return operateStartTime;
	}
	public void setOperateStartTime(Date operateStartTime) {
		this.operateStartTime = operateStartTime;
	}
	public String getOperateTimeLine() {
		return operateTimeLine;
	}
	public void setOperateTimeLine(String operateTimeLine) {
		this.operateTimeLine = operateTimeLine;
	}
	public Integer getOperateStatus() {
		return operateStatus;
	}
	public void setOperateStatus(Integer operateStatus) {
		this.operateStatus = operateStatus;
	}
	public Integer getOperateSize() {
		return operateSize;
	}
	public void setOperateSize(Integer operateSize) {
		this.operateSize = operateSize;
	}
    
}
